#include "NetworkTools.h"

cv::Mat NetworkTool::ToolCropImageFromMask(QString imageSrc){
    // load
    cv::Mat image = cv::imread(imageSrc.toStdString());

    // binary
    cv::Mat grayImage, binaryImage;
    cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);
    cv::threshold(grayImage,  binaryImage, 7, 255, cv::THRESH_BINARY);

    // cal roi
    cv::Rect bound = cv::boundingRect(binaryImage);
    int x, y, centerW, centerH, radius;
    centerW = (int)(bound.width / 2);
    centerH = (int)(bound.height / 2);
    radius = MIN(centerW, centerH);
    y = bound.y + centerH - radius;
    x = bound.x + centerW - radius;

    // gen mask
    cv::Mat copyImage = cv::Mat(image, cv::Range(y, y + 2 * radius), cv::Range(x, x + 2 * radius));
    cv::Mat mask = cv::Mat::zeros(copyImage.size(), CV_8UC3);
    cv::circle(mask, cv::Point(radius, radius), radius, cv::Scalar(255, 255, 255), -1);

    // get ori
    cv::Mat maskImage;
    cv::bitwise_and(copyImage, mask, maskImage);
    return maskImage;
}

cv::Mat NetworkTool::ToolCropWithGaussian(cv::Mat inMat){
    cv::Mat resizeImage, gaussianImage;
    cv::resize(inMat, resizeImage, cv::Size(224, 224));
    cv::GaussianBlur(resizeImage, gaussianImage, cv::Size(11, 11), 10.0);

    cv::Mat exposure, rgbImage;
    cv::addWeighted(resizeImage, 4.0, gaussianImage, -4.0, 128.0, exposure);
    cv::cvtColor(exposure, rgbImage, cv::COLOR_BGR2RGB);
    return rgbImage;
}
